package com.szrt.day20170407;


import org.junit.Test;

/**
 * 冒泡排序
 * 
 * 设计方法
 * 
 * 已知
 * 		1个int数组  随便1个数组都行 
 * 
 * 
 * 
 * 方法设计?
 * 
 * public void sortJiangXu(int [] old)
 * 
 * 
 * 求
 * 
 * 	    2得到一个从大到小排列的数组
 * 
 * 
 * 冒泡：
 * 
 *   考点：    1：  考嵌套的循环
 *   	   2：  什么时候可以结束循环         解决如果已经排好了序 就不需要排序  ?
 *   	   3：  具体每次循环需要多少次     循环的次数一次也不能多。                  ?
 * 
 * 
 * @author scott-13926583118
 * 2017年4月7日
 *
 */
public class SortTest {
	
	
	
	/*@Test
	public void chage() throws Exception {
		
		
		int[] array={10,20};
		
		
		int temp=array[0];
		array[0]=array[1];
		array[1]=temp;
		
		System.out.println(array[0] + ","+ array[1]);
		
		
	}*/
	
	@Test
	public void sortJiangXuTest() throws Exception {
		int[] ages={60,40,30,20,5,10};
		sortJiangXu(ages);
	}
	
	
	
	/**
	 * 将1个无序的int数组从大到小配列  理解void是关键  原因指向的是同一个堆内存中的数组 1个改变，另外一个自然改变
	 * @param old
	 * @return
	 */
	public void sortJiangXu(int [] old){
		
		
		
		for(int outer=1; outer<=old.length-1-outer;outer++){
			//第1次循环 
			boolean a = xunhuan1ci(old,outer);
			
			for(int index=0; index< old.length;index++){
				
				System.out.print(old[index]+" ");
			}
			System.out.println();
			
			if(a==false){
				//不需要比较  退出循环
				break;
			}
		}
	}
	
	
	
	public boolean xunhuan1ci(int [] old,int out){
		//没有排好
		boolean flag=false;
		for(int outer=0; outer<=old.length-1-out;outer++){
			
			//前一个数
			int before =old[outer];
			//后面1个数
			int after  = old[outer+1];
			
			if(after>before){
				//互换位置?
				flag=true;
				int temp=old[outer];
				old[outer]=old[outer+1];
				old[outer+1]=temp;
			}
		}
		return flag;
	}

}
